#include <iostream>
#include <sys/time.h>
#include <sys/timerfd.h>
#include <unistd.h>

int main() {
  // 1.创建定时器，并阻塞等待
  int timerfd = timerfd_create(CLOCK_MONOTONIC, 0);

  // 2.设置定时器超时时间
  itimerspec itimer;
  // 设置第一次超时时间
  itimer.it_value.tv_sec = 1;  // 秒
  itimer.it_value.tv_nsec = 0; // 毫秒
  // 设置第一次之后的超时时间
  itimer.it_interval.tv_sec = 1;
  itimer.it_interval.tv_nsec = 0;

  // 3.将超时时间写入定时器
  timerfd_settime(timerfd, 0, &itimer, nullptr);

  // 4.开始测试超时写入
  int count = 0;
  while (true) {
    uint64_t num;
    int ret_read = read(timerfd, &num, sizeof(num));
    if (ret_read < 0) {
      std::cout << "读取错误" << std::endl;
    }
    std::cout << "读取到timefd中数据,检测到超时..." << ++count << std::endl;
  }

  return 0;
}